/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.ufjf.posjava.cm.model.DAO;

import br.ufjf.posjava.cm.model.Profissional;
import br.ufjf.posjava.cm.util.GenericDao;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

/**
 *
 * @author Filipe
 */
public class ProfissionalDAO extends GenericDao<Profissional, Integer> {

    @Override
    public void inserir(Profissional obj) throws ClassNotFoundException, SQLException{
        String sql = "INSERT INTO profissional (nome,tipo,usuario,senha) VALUES (?,?,?, MD5(? ))";

        ArrayList<String> lista = new ArrayList<String>();
        lista.add(obj.getNome());
        lista.add(obj.getTipo());
        lista.add(obj.getUsuario());
        lista.add(obj.getSenha());

        executaDML(sql, lista);
    }

    @Override
    public void alterar(Profissional obj) throws ClassNotFoundException, SQLException {
        String sql = "UPDATE profissional SET nome = ?, tipo = ?, usuario = ?, senha = MD5(?) where id = ?";

        ArrayList<String> lista = new ArrayList<String>();
        lista.add(obj.getNome());
        lista.add(obj.getTipo());
        lista.add(obj.getUsuario());
        lista.add(obj.getSenha());
        lista.add(obj.getIdProfissional().toString());

        executaDML(sql, lista);
    }

    @Override
    public void apagar(Profissional obj) throws ClassNotFoundException, SQLException {
        String sql = "DELETE FROM profissional WHERE id = ?";

        ArrayList<String> lista = new ArrayList<String>();
        lista.add(obj.getIdProfissional() + "");

        executaDML(sql, lista);
    }

    @Override
    public Profissional pesquisarChave(Integer obj) throws ClassNotFoundException, SQLException {
        String sql = "SELECT * FROM profissional WHERE id = ?";
        ArrayList<String> lista = new ArrayList<String>();
        lista.add(obj.toString());

        ResultSet rs = executaSql(sql, lista);
        if (rs.next()) {
            Profissional profissional = new Profissional(rs.getInt("id"), rs.getString("nome"), rs.getString("tipo"),
                    rs.getString("usuario"), rs.getString("senha"));
            return profissional;
        } else {
            return null;
        }
    }

    @Override
    public ArrayList<Profissional> buscarTodos() throws ClassNotFoundException, SQLException {
        String sql = "SELECT * FROM profissional";
        ArrayList<String> lista = new ArrayList<String>();
        ArrayList<Profissional> listaP = new ArrayList<Profissional>();
        ResultSet rs = executaSql(sql, lista);
        while (rs.next()) {
            Profissional p = new Profissional(rs.getInt("id"), rs.getString("nome"), rs.getString("tipo"),
                    rs.getString("usuario"), rs.getString("senha"));
            listaP.add(p);
        }
        return listaP;
    }

    /**
     * Método que irá validar o usuário
     *
     * @param login
     * @param senha
     * @return
     * @throws ClassNotFoundException
     * @throws SQLException
     */
    public Profissional validaLogin(String login, String senha) throws ClassNotFoundException, SQLException {
        String sql = "SELECT * FROM profissional WHERE usuario = ? AND senha = MD5(?)";
        ArrayList<String> lista = new ArrayList<String>();
        lista.add(login);
        lista.add(senha);

        ResultSet rs = executaSql(sql, lista);
        if (rs.next()) {
            Profissional profissional = new Profissional(rs.getInt("id"),
                    rs.getString("nome"), rs.getString("tipo"), rs.getString("usuario"), rs.getString("senha"));
            return profissional;
        } else {
            return null;
        }
    }

    /**
     *
     * @return @throws ClassNotFoundException
     * @throws SQLException
     */
    public ArrayList<Profissional> buscarProfissional(String nome) throws ClassNotFoundException, SQLException {
        String sql = "SELECT *  FROM profissional WHERE nome LIKE '%"+nome+"%'";

        ArrayList<String> lista = new ArrayList<String>();
        ArrayList<Profissional> listaP = new ArrayList<Profissional>();
        ResultSet rs = executaSql(sql, lista);
        while (rs.next()) {
            Profissional p = new Profissional(rs.getInt("id"), rs.getString("nome"), rs.getString("tipo"),
                    rs.getString("usuario"), rs.getString("senha"));
            listaP.add(p);
        }
        return listaP;
    }

}
